home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / CaptainPlanetHD / src / readplanetdisk.asm < prev   
Assembly Source File  |  2000-05-11  |  3KB  |  141 lines

  1. ; Captain Planet disk image reader
  2. ; v1.0: works fine with my disk (RATT-DOS 2.0)
  3. ; by Kyzer/CSG
  4.  
  5. FILEMODE=1
  6.     include    diskreader.asm
  7.     BUFFER    TRACKBUFFER
  8.  
  9.     ; load and decode bootblock and ratt-dos
  10.     DOSREAD    #0
  11.  
  12.     lea    TRACKBUFFER+$80,a0
  13.     move.w    #620/4-1,d0
  14. .d1    sub.l    #'BooT',(a0)+
  15.     dbra    d0,.d1
  16.     lea    TRACKBUFFER+$400,a0
  17.     lea    rattdos,a1
  18.     move.w    #$1000/4-1,d0
  19. .d2    sub.l    #'RaTt',(a0)
  20.     move.l    (a0)+,(a1)+
  21.     dbra    d0,.d2
  22.  
  23.     SAVEF    bootnam(pc),TRACKBUFFER+$80,#620
  24.     SAVEF    rattnam(pc),rattdos,#$1000
  25.  
  26.     ; patch ratt-dos to use our own loading routines
  27.     lea    rattdos,a6
  28.  
  29.     ; RTS patches
  30.     lea    .rlist(pc),a0
  31.     moveq    #13-1,d0
  32. 1$    move.w    (a0)+,d1
  33.     move.w    #$4e75,(a6,d1.w)
  34.     dbra    d0,1$
  35.  
  36.     ; other patches
  37.     lea    fakehw,a0
  38.     move.l    a0,$278+2(a6)        ;278    lea    fakehw,a5
  39.     move.l    a0,$286+2(a6)        ;286    lea    fakehw,a3
  40.     lea    .track(pc),a0
  41.     move.l    a0,$59e+2(a6)        ;59e    move.l    d2,track
  42.     lea    .loader(pc),a0
  43.     move.l    a0,$6ba+2(a6)        ;6ba    jmp    loader
  44.  
  45.     lea    .plist(pc),a0
  46. 2$    move.w    (a0)+,d0        ; get patch
  47.     move.w    (a0)+,d1        ; get offset
  48.     beq    .flush            ; skip to rest of loader program
  49.     move.w    d0,(a6,d1.w)
  50.     bra.s    2$
  51.  
  52. .rlist    dc.w    $260,$33c,$3ec,$462,$5a4,$610,$62e,$652
  53.     dc.w    $666,$676,$6ae,$70e,$9f4
  54.  
  55. .plist    dc.w    $0042,$460
  56.     dc.w    $004a,$33a
  57.     dc.w    $202c,$338
  58.     dc.w    $23c2,$59e
  59.     dc.w    $4cdf,$45e
  60.     dc.w    $4ef9,$6ba
  61.     dc.w    $6002,$290
  62.     dc.w    $6004,$2c8
  63.     dc.w    $6004,$2d2
  64.     dc.w    $6004,$4c2
  65.     dc.w    $6004,$506
  66.     dc.w    $600c,$266
  67.     dc.w    $600e,$4a0
  68.     dc.w    $7000,$62c
  69.     dc.w    $b040,$60e
  70.     dc.w    0,0
  71.  
  72. .loader    movem.l    d0-d1/a0-a1/a5-a6,-(sp)
  73.     move.l    .a5save(pc),a5
  74.     moveq    #0,d0
  75.     move.b    .track+3(pc),d0
  76.     move.l    (a4),a0
  77.     bsr    __rawrd
  78.     move.l    (a4),a0
  79.     move.w    30(sp),d0
  80.     bsr    __sync
  81.     movem.l    (sp)+,d0-d1/a0-a1/a5-a6
  82.     jmp    rattdos+$73a
  83. .track    dc.l    0
  84. .a5save    dc.l    0
  85.  
  86.  
  87. .flush    move.l    a6,-(sp)
  88.     move.l    execbase(a5),a6
  89.     call    CacheClearU
  90.     move.l    (sp)+,a6
  91.  
  92.     lea    .a5save(pc),a0
  93.     move.l    a5,(a0)
  94.  
  95.     MOVE.W    #1,D1
  96.     JSR    4(A6)    ; init drives
  97.  
  98.     lea    dirbuf,a0
  99.     MOVE.L    A0,D0
  100.     JSR    8(A6)    ; change directory-buffer
  101.  
  102.     lea    TRACKBUFFER,a0
  103.     MOVE.L    A0,D0
  104.     JSR    12(A6)    ; change data-buffer (mfm/decode)
  105.  
  106.     moveq    #0,d0
  107.     jsr    $38(a6)    ; read directory
  108.  
  109.     ; save directory file
  110.     SAVEF    dirname(pc),dirbuf,#1628
  111.  
  112.     ; save every file in the directory
  113.     lea    dirbuf+$BC,a0
  114. .next    tst.b    (a0)
  115.     beq.s    .done
  116.     move.l    a0,-(sp)
  117.     bsr.s    .save
  118.     move.l    (sp)+,a0
  119.     lea    $18(a0),a0
  120.     bra.s    .next
  121. .done    rts
  122.  
  123. .save    lea    filebuf,a1
  124.     movem.l    a0-a1/a5-a6,-(sp)
  125.     exg.l    a0,a1        ; a1 = filename, a0 = buffer
  126.     move.w    #-1,d1
  127.     jsr    $1c(a6)
  128.     movem.l    (sp)+,a0-a1/a5-a6
  129.     bra    __savef    ; a0 = filename, a1 = buffer, d0 = length
  130.  
  131. rattnam    dc.b    'rattdos',0
  132. bootnam    dc.b    'bootcode',0
  133. dirname    dc.b    'cp.dir',0
  134.     cnop    0,4
  135.  
  136.     section    mem,bss
  137. rattdos    ds.b    4096
  138. dirbuf    ds.b    4096
  139. fakehw    ds.b    $200
  140. filebuf    ds.b    80*1024
  141.